import { Component, OnInit, ViewChild } from '@angular/core';
import { STChange, STColumn, STColumnBadge, STComponent, STData } from '@delon/abc/st';
import { SFComponent, SFSchema, SFUISchema } from '@delon/form';
import { ModalHelper, _HttpClient } from '@delon/theme';
import { EAEnvironmentService } from '@shared';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';
import { SupplyManagementService } from '../../services/supply-management.service';
import { SupplyManagementAddDriversComponent } from '../add-drivers/add-drivers.component';
import { CarAddmodalComponent } from '../addmodal/addmodal.component';


const BADGE: STColumnBadge = {
  1: { text: '空闲', color: 'success' },
  2: { text: '未实名', color: 'error' },
  3: { text: '在途', color: 'warning' },
};

@Component({
  selector: 'app-supply-management-assigned-car',
  templateUrl: './assigned-car.component.html',
})
export class SupplyManagementVehicleAssignedCarComponent implements OnInit {
  record: any = {};
  i: any;
  schema: SFSchema = {};
  ui: SFUISchema = {};
  columns: STColumn[] = [];

  @ViewChild('st') st!: STComponent;
  @ViewChild('sf', { static: false }) sf!: SFComponent;
  status: string = 'anew';
  url = ''; // 请求的api地址
  params: any = {}; // 传进来的参数
  cardBADGE: STColumnBadge | any = {
    0: { text: '空闲', color: 'success' },
    1: { text: '在途', color: 'warning' },
    2: { text: '未认证', color: 'error' },
  };
  selectedRows: any = null; // 已选行
  constructor(
    private modal: NzModalRef,
    private msgSrv: NzMessageService,
    public service: SupplyManagementService,
    private modalHelper: ModalHelper,
    private envSrv: EAEnvironmentService,
    private modalSrv: NzModalService
  ) {
    this.initSF();
    this.initSt();
  }

  /**
* 查询参数
*/
  get reqParams() {
    return {
      ...this.sf?.value,
      loadingTime: this.params?.loadingTime,
      enterpriseId: this.params?.shipperAppUserId,
      enterpriseProjectId: this.params?.enterpriseProjectId,
      unloadingTime: this.params?.unloadingTime,
    };
  }




  /**
* 初始化查询表单
*/
  initSF() {
    this.schema = {
      properties: {
        _$expand: { type: 'boolean', ui: { hidden: true } },
        nameOrPhone: {
          type: 'string',
          title: '承运司机',
          ui: {
            placeholder: '请输入司机姓名/手机号'
          }
        },
        carNo: {
          type: 'string',
          title: '车牌号',
          maxLength: 9,
          ui: {
            placeholder: '请输入车牌号'
          }
        },
      },
      type: 'object',
    };
    this.ui = { '*': { spanLabelFixed: 10, grid: { span: 8, gutter: 1 } } };
  }

  /**
   * 初始化数据列表
   */
  initSt() {
    this.columns = [
      { width: 50, type: 'radio', className: 'text-center' },
      { title: '司机姓名', width: 120, index: 'name', className: 'text-center' },
      { title: '手机号', index: 'telephone', width: 200, className: 'text-center' },
      { title: '车队长', render: 'carCaptain', className: 'text-center' },
      { title: '指定车辆', width: 300, render: 'carId', className: 'text-center' },
      { title: '状态', render: 'driverStatus', className: 'text-center', type: 'badge', badge: BADGE },
    ];
  }

  ngOnInit(): void {
    console.log(this.params)
  }

  dataProcess = (data: STData[], rawData: any): STData[] => {
    if (rawData.status === 505016) {
      this.modalSrv.confirm({
        nzTitle: '系统提示',
        nzContent: '<b>该司机还未注册，是否邀请他注册？点击"是"系统将发送邀请短信给司机</b>',
        nzOkText: '确定',
        nzCancelText: '取消',
        nzOnOk: () => {
          this.sendMsg(this.sf?.value?.nameOrPhone).subscribe((res => {
            if (res.code === '1') {
              this.service.msgSrv.success('发送成功');
            } else {
              this.service.msgSrv.success('发送失败');
            }
          }));
        }
      });
      return [];
    }
    return data.map((i, index) => {
      i.carId = '';
      i.disabled = (i?.certificationStatus === 1 && i.driverStatus === 1);
      const defaultCar = i?.userCarLicenseDesensitizationVOList?.find((item: any) => item.isDefault);
      if (defaultCar) {
        i.carId = defaultCar?.carId;
      }
      return i;
    });
  }

  save(): void {
    const { carId, appUserId: driverId, captainAppUserId: carCaptainId } = this.selectedRows;
    const params: any = { carId, driverId, carCaptainId };
    this.service.request(this.url, { ...params, ...this.params }).subscribe((res: any) => {
      if (res) {
        this.service.msgSrv.success('指派成功！');
        this.modal.close(res);
      }
    })

  }

  changeSt(e: STChange): void {
    if (e?.type === 'loaded') this.selectedRows = null;
    if (e?.type === 'radio') this.selectedRows = e?.radio;

  }
  /**
   * 添加司机
   * @param item
   */
  addDriver() {
    this.modalHelper.create(CarAddmodalComponent, {}, { size: 900, modalOptions: { nzMaskClosable: false } }).subscribe((res) => {
      if (res) this.st.reload();
    });
  }

  /**
   * 校验司机是否能设置车队长
   * @param item 当前对象
   */
  verifyCanSetCarCaptain(item: any) {
    this.service.request(this.service.$api_get_sys_config, [{ itemKey: 'sys.config.shipper.setCarCaptain', businessId: this.envSrv.env.enterpriseId }]).subscribe(res => {
      if (res && res.length > 0) {
        const { itemValue } = res[0];
        if (itemValue !== '1') {
          this.service.msgSrv.error('不可设置车队长！');
          return;
        }
        this.setCarCaptain(item);
      }
    })
  }

  /**
   * 设置车队长
   */
  setCarCaptain(item: any) {

    this.modalHelper.create(SupplyManagementAddDriversComponent, { dirvierInfo: item }, {
      size: 900,
      modalOptions: { nzMaskClosable: false, nzTitle: '设置' }
    }
    ).subscribe((res) => {
      if (res) {
        item.captainName = res?.name;
        item.captainPhone = res?.mobile;
        item.captainAppUserId = res?.appUserId;
      }
    });
  }

  close(): void {
    this.modal.destroy();
  }

  reset() {
    this.sf.reset();
    this.st.load(1);
  }

  /**
   * 验证车辆的状态
   */
  verifyVechicleStatus(params: any) {
    if (this.selectedRows) {
      const obj = this.status === 'anew' ? { resourceId: params.id } : { ...params };
      const { carId, appUserId: driverId, captainAppUserId: carCaptainId } = this.selectedRows;
      const carInfo: any = { carId, driverId, carCaptainId };
      this.service.request(this.service.$api_verify_vehicle_status, { ...obj, ...carInfo }).subscribe(res => {
        if (res) {
          const { title, alert, subContent, content } = res;
          switch (alert) {
            case 'Error':
              // if (code === '3' || code === '4' || code === '8') {
              //   this.error(title, subContent, '#CF3834');
              // } else {
              this.error(title, content, subContent);
              break;
            case 'Warn':
              this.showConfirm(title, content, subContent);
              break;
            case 'Success':
              this.save();
              break;
          }
        }
      })
    }

  }

  error(title: string, content: string, subContent: string): void {
    this.modalSrv.error({
      nzTitle: title,
      nzContent: `<span class="text-error-dark">${content ? content : ''}</span><span class="text-grey-dark">${subContent ? subContent : ''}</span>`,
      nzOkText: '知道了'
    });
  }

  showConfirm(title: string, content: string, subContent: string): void {
    this.modalSrv.confirm({
      nzTitle: title,
      nzContent: `<span class="text-error-dark">${content ? content : ''}</span><span class="text-grey-dark">${subContent ? subContent : ''}</span>`,
      nzOkText: '继续',
      nzCancelText: '取消',
      nzOnOk: () => {
        this.save();
      }
    });
  }

  /**
* 发送邀请司机注册短信
*/
  sendMsg(phoneNumber: string) {
    return this.service.request(this.service.$api_send_msg_code, phoneNumber)
  }

}
